from abc import ABC, abstractmethod
from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from .Pos import Pos, PosSet
    from .Chess import ChessBase


class MoveBase(ABC):
    def __init__(self):
        pass

    def __init__(self, chess: "ChessBase"):
        self.owner = chess

    @abstractmethod
    def can_move_to(self, player: int, x: "Pos") -> bool:
        pass

    @abstractmethod
    def get_reachable(self) -> "PosSet":
        pass

    @abstractmethod
    def get_movable(self) -> "PosSet":
        pass

    @abstractmethod
    def get_eatable(self) -> "PosSet":
        pass

    @abstractmethod
    def on_moved(self):
        pass
